import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let pageViewItems = [
    {
        "label": "PageView_Create",
        "insertText": dedent`
        local pageView = GUI:PageView_Create(\${1:parent}, \${2:"pageView"}, \${3:0}, \${4:0}, \${5:300}, \${6:500}, \${7:1})
        `,
        "documentation": dedent`# 创建翻页容器
        ## PageView_Create(parent, ID, x, y, width, height, direction)

        | 参数   | 必选 | 类型   | 注释        |
        | :----- | :--- | :----- | :---------- |
        | parent | 是   | obj    | 父节点对象  |
        | ID     | 是   | string | 唯一ID      |
        | x      | 是   | int    | 位置 横坐标 |
        | y      | 是   | int    | 位置 纵坐标 |
        | width  | 是   | int    | 宽度        |
        | height | 是   | int    | 高度        |

        - 示例代码
        \`\`\`
        local pageView = GUI:PageView_Create(parent, "pageView", 0, 0, 300, 500, 1)
        \`\`\`
        `
    },
    {
        "label": "PageView_setClippingEnabled",
        "insertText": dedent`
        GUI:PageView_setClippingEnabled(\${1:pageView}, \${2:true})
        `,
        "documentation": dedent`# 设置翻页容器是否有裁切
        ## PageView_setClippingEnabled(widget, value)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | value  | 是   | bool | 是否有裁切 |
        `
    },
    {
        "label": "PageView_setBackGroundColor",
        "insertText": dedent`
        GUI:PageView_setBackGroundColor(\${1:pageView}, \${2:"#000000"})
        `,
        "documentation": dedent`# 设置翻页容器背景颜色
        ## PageView_setBackGroundColor(widget, value)

        | 参数   | 必选 | 类型   | 注释                                                         |
        | :----- | :--- | :----- | :----------------------------------------------------------- |
        | widget | 是   | obj    | 容器对象                                                     |
        | value  | 是   | string | 色值(“#000000”) ! 渐变色需传参table \`{"#FF0000", "#FFFFFF"}\` |
        `
    },
    {
        "label": "PageView_setBackGroundColorType",
        "insertText": dedent`
        GUI:PageView_setBackGroundColorType(\${1:pageView}, \${2:1})
        `,
        "documentation": dedent`# 设置翻页容器背景颜色类型
        ## PageView_setBackGroundColorType(widget, value)

        | 参数   | 必选 | 类型 | 注释               |
        | :----- | :--- | :--- | :----------------- |
        | widget | 是   | obj  | 容器对象           |
        | value  | 是   | int  | 1：单色，2：渐变色 |
        `
    },
    {
        "label": "PageView_setBackGroundColorOpacity",
        "insertText": dedent`
        GUI:PageView_setBackGroundColorOpacity(\${1:pageView}, \${2:255})
        `,
        "documentation": dedent`# 设置翻页容器背景透明度
        ## PageView_setBackGroundColorOpacity(widget, value)

        | 参数   | 必选 | 类型 | 注释          |
        | :----- | :--- | :--- | :------------ |
        | widget | 是   | obj  | 容器对象      |
        | value  | 是   | int  | 透明度(0-255) |
        `
    },
    {
        "label": "PageView_scrollToItem",
        "insertText": dedent`
        GUI:PageView_scrollToItem(\${1:pageView}, \${2:0})
        `,
        "documentation": dedent`# 设置翻页容器滚动到子页面
        ## PageView_scrollToItem(widget, index)

        | 参数   | 必选 | 类型 | 注释         |
        | :----- | :--- | :--- | :----------- |
        | widget | 是   | obj  | 容器对象     |
        | index  | 是   | int  | 子页面序列号 |
        `
    },
    {
        "label": "PageView_getCurrentPageIndex",
        "insertText": dedent`
        local index = GUI:PageView_getCurrentPageIndex(\${1:pageView})
        `,
        "documentation": dedent`# 获取当前子页面序列号
        ## PageView_getCurrentPageIndex(widget)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值：子页面序列号
        `
    },
    {
        "label": "PageView_setCurrentPageIndex",
        "insertText": dedent`
        GUI:PageView_setCurrentPageIndex(\${1:pageView}, \${2:0})
        `,
        "documentation": dedent`# 设置翻页容器当前子页序列号 [3.40.3版本]
        ## PageView_setCurrentPageIndex(widget, index)

        | 参数   | 必选 | 类型 | 注释         |
        | :----- | :--- | :--- | :----------- |
        | widget | 是   | obj  | 容器对象     |
        | index  | 是   | int  | 子页面序列号 |
        `
    },
    {
        "label": "PageView_getItems",
        "insertText": dedent`
        local items = GUI:PageView_getItems(\${1:pageView})
        `,
        "documentation": dedent`# 获取翻页容器子页面
        ## PageView_getItems(widget)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值：子页面对象
        `
    },
    {
        "label": "PageView_getItemCount",
        "insertText": dedent`
        local count = GUI:PageView_getItemCount(\${1:pageView})
        `,
        "documentation": dedent`# 获取翻页容器子页面数量
        ## PageView_getItemCount(widget)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 容器对象 |

        - 返回值：子页面数量
        `
    },
    {
        "label": "PageView_addPage",
        "insertText": dedent`
        GUI:PageView_addPage(\${1:pageView}, \${2:page})
        `,
        "documentation": dedent`# 翻页容器加载子页面
        ## PageView_addPage(widget, value)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 容器对象   |
        | value  | 是   | obj  | 子页面对象 |
        `
    },
    {
        "label": "PageView_addOnEvent",
        "insertText": dedent`
        GUI:PageView_addOnEvent(\${1:pageView}, \${2:function() \n    -- 监听事件函数\nend})
        `,
        "documentation": dedent`# 翻页容器加监听事件
        ## PageView_addOnEvent(widget, eventCB)

        | 参数    | 必选 | 类型     | 注释         |
        | :------ | :--- | :------- | :----------- |
        | widget  | 是   | obj      | 容器对象     |
        | eventCB | 是   | function | 监听事件函数 |
        `
    },
]



export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    pageViewItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
